local skynet = require "skynet"
local sproto = require "network.proto.sprotoa"

local sprotox = {}
function sprotox.new(conf)
    local c2s = assert(conf.c2s)
    local s2c = assert(conf.s2c)
    local binary = conf.binary and true or false
    local self = {
        c2s = c2s,
        s2c = s2c,
        binary = binary,
        c2s_sproto = sproto.create(c2s,binary),
        s2c_sproto = sproto.create(s2c,binary),
    }
    return setmetatable(self,{__index=sprotox})
end

function sprotox:reload()
    self.c2s_sproto = sproto.create(self.c2s,self.binary)
    self.s2c_sproto = sproto.create(self.s2c,self.binary)

    skynet.error(string.format("sprotox:reload c2s = %s, s2c = %s", self.c2s, self.s2c))
end

function sprotox:pack_message(msg)
    return self.s2c_sproto:pack_message(msg)
end

function sprotox:unpack_message(msg)
    return self.c2s_sproto:unpack_message(msg)
end

function sprotox:cl_pack_message(msg)
    return self.c2s_sproto:pack_message(msg)
end

function sprotox:cl_unpack_message(msg)
    local is_request = self.s2c_sproto:is_request(msg)
    if is_request then
        -- request
        return self.s2c_sproto:unpack_message(msg)
    else
        -- response
        return self.c2s_sproto:unpack_message(msg)
    end

end

return sprotox
